\documentclass[12pt,notitlepage]{report}
\usepackage[slovak]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsfonts, amsmath, amsthm, amssymb}
\usepackage{a4wide} % nastavuje standardní evropský formát stránek A4
\usepackage{url}
%\usepackage{index} % nutno pou¾ít v pøípadì tvorby rejstøíku balíèkem makeindex
%\usepackage{fancybox} % umo¾òuje pokroèilé rámeèkování :-)
\usepackage{graphicx} % nezbytné pro standardní vkládání obrázkù do dokumentu
\pagestyle{headings}
\pagestyle{plain}

\frenchspacing

\usepackage[left=4cm]{geometry} % nastavení dané velikosti okrajù
\numberwithin{equation}{section}
%\newindex{default}{idx}{ind}{Rejstřík}
\newcommand{\todo}[1]{(\textbf{TODO:} #1)}
\newcommand{\cmdopt}[1]{\item \texttt{#1} -- }
\newcommand{\capitem}[1]{\item \textit{#1} -- }
%\newcommand{\url}[1]{{\small \texttt{#1}}}

%% Define a new 'leo' style for the package that will use a smaller font.
\makeatletter
\def\url@leostyle{%
  \@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\small\ttfamily}}}
\makeatother
%% Now actually use the newly defined style.
\urlstyle{leostyle}

\title{Spracovanie snímkov z družice Landsat}  
\author{Matúš Tejiščák}

%\date{}

\begin{document}


%\csprimeson % zapne jednoduché psaní èeských uvozovek pomocí klasických znakù, ale potom pozor 
       % na originální apostrofy, které budou chybnì interpretovány!!!

%%% Následuje první, úvodní, strana bakaláøské práce. Jednotlivé polo¾ky nahraïte dle vlastních
%%% údajù. Zmìnit podle konkrétní délky jednotlivých polo¾ek mù¾ete i zalomení øádkù.
\begin{titlepage}
\begin{center}
\ \\

\vspace{15mm}

\large
Univerzita Karlova v Praze\\
Matematicko-fyzikální fakulta\\

\vspace{5mm}

{\Large\bf BAKALÁŘSKÁ PRÁCE}

\vspace{10mm}

%%% Aby vlo¾ní loga v¹e správnì fungovalo, je tøeba mít soubor logo.eps nahraný v pracovním adresáøi,
%%% tj. v adresáøi, kde se nachází pøekládaný zdrojový soubor. Soubor logo.eps je mo¾né získat napø.
%%% na adrese: http://www.mff.cuni.cz/fakulta/symboly/logo.eps
\includegraphics[scale=0.3]{logo.eps} 

\vspace{15mm}

%\normalsize
{\Large Matúš Tejiščák}\\ % doplòte va¹e jméno
\vspace{5mm}
{\Large\bf Zpracování snímků z družice Landsat}\\ % doplòte název práce
\vspace{5mm}
Katedra teoretické informatiky a matematické logiky\\ % doplòte název katedry èi ústavu

\vspace{25mm}

\large
\noindent Vedoucí bakalářské práce: Mgr. Ondřej Zajíček % doplòte odpovídající údaje
\hskip20mm

\vspace{1mm} 
\noindent Studijní program: Informatika -- Programování % doplòte odpovídající údaje
%%% dal¹í øádek mù¾ete ve vìt¹inì pøípadù (tj. pokud údaje uvedené vý¹e nejsou pøíli¹ dlouhé) zru¹it
\hskip20mm

\vspace{10mm}

2008
\end{center}

\end{titlepage} % zde konèí úvodní strana

\normalsize % nastavení normální velikosti fontu
\setcounter{page}{2} % nastavení èíslování stránek
\ \vspace{10mm} 

\noindent Ďakujem svojmu vedúcemu, Mgr. Zajíčkovi, za zodpovedný prístup, rady, dobré postrehy
a nápady týkajúce sa tejto práce.

\vspace{\fill} % nastavuje dynamické umístìní následujícího textu do spodní èásti stránky
\noindent Prehlasujem, že som svoju bakalársku prácu napísal samostatne a výhradne s použitím citovaných prameňov. Súhlasím so zapožičiavaním práce a jej zverejňovaním.

\bigskip
\noindent V Prahe dňa 7.8.2008\hspace{\fill}Matúš Tejiščák\\ % doplòte patøièné datum, jméno a pøíjmení

%%%  Výtisk pak na tomto míste nezapomeňte PODEPSAT!
%%%                     *********

\tableofcontents % vkládá automaticky generovaný obsah dokumentu

\newpage % pøechod na novou stránku

%%% Následuje strana s abstrakty. Doplòte vlastní údaje.
\noindent
Název práce: Zpracování snímků z družice Landsat\\
Autor: Matúš Tejiščák\\
Katedra (ústav): Katedra teoretické informatiky a matematické logiky\\
Vedoucí bakalářské práce: Mgr. Ondřej Zajíček\\
e-mail vedoucího: santiago@crfreenet.org\\

\noindent Abstrakt: V predloženej práci sa skúmajú možnosti spracovania snímkov z družice Landsat
spôsobom lepším než naivná kompozícia RGB obrazu z monochromatických obrazov v červenom, zelenom
a modrom pásme viditeľného svetla, ktoré sú súčasťou verejne dostupných dát z Landsatu. Tieto
monochromatické obrazy majú totiž rozlíšenie 28.5 metrov na pixel. Dostupný je však aj tzv.
\emph{panchromatický} kanál s rozlíšením 14.25 m/px, ktorý ale nekorešponduje priamo s pásmom
viditeľného svetla -- je posunutý smerom k infračervenej oblasti. Hľadá sa teda spôsob,
ako z obrazov vo viditeľnom svetle (s nízkym rozlíšením) a panchromatického obrazu (s vysokým
rozlíšením) zasahujúceho do viditeľného pásma zostaviť obraz v prirodzených farbách a zároveň
s vysokým rozlíšením. Ďalším cieľom práce je poskytnúť automatizovaný spôsob spracovania
snímkov od ich stiahnutia z internetu, cez spracovanie uvedeným spôsobom, až po vytvorenie
výsledného, hotového obrazu.
\\

\noindent Kľúčové slová: Landsat, satelitné snímky, spracovanie, automatizácia

\vspace{10mm}

\noindent
Title: Landsat imagery processing\\
Author: Matúš Tejiščák\\
Department: Department of Theoretical Computer Science and Mathematical Logic\\
Supervisor: Mgr. Ondřej Zajíček\\
Supervisor's e-mail address: santiago@crfreenet.org\\

\noindent Abstract: In the presented work, possibilities to process Landsat imagery are studied.
The aim is to find better methods of composition of natural-colored images from the monochromatic
images in the red, green, and blue spectral ranges, publicly available on the Landsat FTP. These images'
resolution is 28.5 m per pixel. Furthermore, panchromatic images are provided; their resolution % furthermore?
is 14.25 m/px. However, the spectral range of panchromatic images does not correspond exactly
to the visible light, instead, they cover bands roughly from green to near infrared spectral area.
Therefore a way is sought to merge the spectral components into a single natural-colored,
yet high-resolution (equal to resolution of the panchromatic component) image. Another objective is to
provide an automated way of downloading relevant scenes, processing them in the described way and
finally outputting a single resulting image.
\\

\noindent Keywords: Landsat, satellite, imagery, processing, automation

\newpage

%%% Následuje text bakaláøské práce èlenìný do kapitol, které se èíslují, oznaèí názvy a graficky oddìlí.
%%% Nedoporuèuje se pou¾ívat víc ne¾ dvì úrovnì èíslování kapitol, viz pøíklad ní¾e.

\chapter{Úvod}

\section{Motivácia}

Landsat je vesmírny program zameraný na monitorovanie zemského povrchu s dôrazom na pravidelné obnovovanie
nasnímaných dát\cite{lh-home}. Družica Landsat 7, vypustená v roku 1999, poskytuje obrazy v ôsmich
spektrálnych pásmach, z ktorých je 7 disjunktných a ôsmym je tzv. panchromatické pásmo, ktoré pokrýva
oblasť zhruba zeleného až blízkeho infračerveného svetla (kanály 2, 3 a 4). \cite{lh-techguide}

Vzhľadom na široký spektrálny záber a pomerne vysoké priestorové rozlíšenie snímkov je tieto možné využiť
na rozličné účely -- zisťovať druh povrchu, množstvo a rozloženie vegetácie\cite{lh-dataprops}, či získavať
klasické satelitné snímky v prirodzenom, viditeľnom svetle.

Na získavanie snímkov v prirodzenom svetle obsahujú dáta z Landsatu práve snímky v červenom, zelenom
a modrom pásme. Tieto snímky majú rozlíšenie 28.5 metra na pixel. Ich zložením vznikne na pohľad prirodzený
obraz, avšak s nízkym rozlíšením. Okrem nich totiž do viditeľného svetla zasahuje aj panchromatický kanál
s rozlíšením 14.25 metra na pixel. Ak by sme extrahovali zložku panchromatického kanála zasahujúcu do
viditeľného pásma a vhodne ju skombinovali s obrazom z červeného, zeleného a modrého pásma, dostali by sme
snímok vo viditeľnom svetle s vysokým rozlíšením.

Potrebujeme teda nájsť spôsob, ako kombinovať obrazy v rôznych spektrálnych pásmach (a s rôznym rozlíšením),
aby sme dostali požadovaný výsledok -- štandardný RGB obraz s rozlíšením panchromatického kanála. Okrem toho
chceme implementovať program, ktorý by všetko vykonával automaticky -- stiahol by potrebné dáta z internetu,
spracoval ich a vyprodukoval by výsledný obraz ako súbor v nejakom štandardnom formáte.

\section{Dostupný materiál}
\label{sec:material}
Spracovávané údaje sa nachádzajú na FTP serveri Global Land Cover Facility (GLCF)\footnote{Bližšie informácie
o GLCF: \url{http://glcf.umiacs.umd.edu/aboutUs/}} na adrese
\url{ftp://ftp.glcf.umiacs.umd.edu/glcf/Landsat/WRS2/}. Všetky dáta (vrátane ukážok) použité v práci boli
čerpané odtiaľto, tj. z \cite{ls-data}.

Snímky zemského povrchu sú rozdelené do \emph{scén} o veľkosti zhruba $180\times180$ km; každá takáto scéna
je nasnímaná v ôsmich spektrálnych pásmach a takto vzniknuté snímky (7+2 monochromatických obrázkov\footnote{
Kanál č. 6 sa poskytuje v dvoch snímkoch -- s vysokým ziskom a nízkym ziskom.}) sa ukladajú
na príslušné miesto v adresárovej štruktúre repozitára.

Adresárová štruktúra repozitára odzrkadľuje systém WRS (sekcia \ref{wrs}), čiže prvá podadresárová úroveň
diferencuje medzi WRS cestami a druhá podadresárová úroveň medzi WRS riadkami. V tretej úrovni sa
diferencuje medzi druhmi dát -- niektoré oblasti majú na výber TM, ETM+\footnote{TM, Thematic Mapper vs. ETM(+),
Enhanced Thematic Mapper (Plus), sú druhy senzorov použité v satelite. \cite{lh-payload}},
prípadne iné dátové sady.

Dáta sú vo formáte GeoTIFF\footnote{V tomto formáte sa dodáva produkt \emph{Level 1G}, čo znamená, že na dáta
boli aplikované isté korekcie, ktorých rozoberanie je mimo rozsahu tejto práce; bližšie informácie sa nachádzajú
v \cite{lh-lev1g}. Špecifikácia formátu GeoTIFF sa nachádza v \cite{geotiff}.}, ktorý využíva
\emph{tagovateľnosť}\footnote{Čím sa rozumie možnosť pripojiť k obrazu
metadáta.} TIFF formátu na jeho obohatenie o geografické metadáta; v tomto prípade ide predovšetkým o dáta
opisujúce mapovanie obrazu na geografické súradnice. Použité geografické
súradnice sú udané v systéme UTM (sekcia \ref{utm}). TIFF obrazy sú komprimované programom \texttt{gzip},
aby bola zredukovaná náročnosť prenosu súborov po internete.

Dekomprimovaný TIFF súbor má veľkosť zhruba 70MB v prípade R, G, B kanálov (28.5 m/px), 280MB v prípade
panchromatického kanála (14.25 m/px). Rozmery obrazov sú asi $7000\times8000$, resp. $14000\times16000$ px
a zaberajú (už spomínanú) oblasť približne $180\times180$ km.

Jeden TIFF súbor obsahuje na čiernom pozadí umiestnený natočený rovnobežník, ktorý obsahuje jeden
snímok po korekcii tak, že 1 pixel zodpovedá príslušnému počtu metrov a celý snímok je v UTM projekcii
príslušnej zóny.

Na štvrtej úrovni adresárovej štruktúry sa teda nachádzajú samotné komprimované TIFF súbory, pre
každý kanál jeden (s výnimkou kanála 6, ktorý sa poskytuje vo dvoch snímkoch -- s vysokým a nízkym ziskom).

\begin{table}[htc]
	\begin{center}\begin{tabular}{r|l|c|c}
		Kanál & Názov & Rozsah ($nm$) & Rozlíšenie ($m/px$)\\ \hline
		1 & Modrý & 450 -- 515 & 28.5 \\
		2 & Zelený & 525 -- 605 & 28.5 \\
		3 & Červený & 630 -- 690 & 28.5 \\
		4 & Blízky IR & 760 -- 900 & 28.5 \\
		5 & Stredný IR & 1550 -- 1750 & 28.5 \\
		6 & Tepelný & 10400 -- 12500 & 57 \\
		7 & Stredný IR & 2080 -- 2350 & 28.5 \\
		8 & Panchromatický & 520 -- 920 & 14.25
	\end{tabular}\end{center}
	\label{bands}
	\caption{Spektrálne rozsahy kanálov Landsatu 7, podľa \cite{lh-techguide}}
\end{table}

Z tabuľky \ref{bands} vidno, že panchromatický kanál zaberá rozsah zhruba kanálov 2, 3 a 4, preto
budeme pracovať s dátami kanálov 1, 2, 3, 4 a 8.

Okrem toho sa na štvrtej úrovni adresárovej štruktúry nachádzajú aj súbory s príponou \texttt{.met},
obsahujúce rozličné informácie o scéne, predovšetkým geografické súradnice rohov scény, projekciu scény,
pixelové rozlíšenie apod. Tieto informácie (obsahujúce informácie o scéne, tj. nečiernom rovnobežníku
v obraze), spolu s metadátami z GeoTIFF tagov umožňujú presne prevádzať súradnice z geografických
na pixelové súradnice v TIFF obraze a vice versa.

\subsection{Systém WRS}
\label{wrs}
WRS (Worldwide Reference System) je systém identifikácie jednotlivých scén snímaných Landsatom. Jednu
scénu identifikuje dvojica prirodzených čísel \emph{cesta-riadok} (path-row). Ciest je 233, riadkov
248. Jednotlivé scény sa navzájom prekrývajú, a to tým viac, čím bližšie k pólom.

Bližšie informácie o WRS\footnote{Pre naše účely stačí vedieť, že scéna sa
identifikuje dvojicou prirodzených čísel v nejakom rozsahu.} podáva \cite{lh-orbit}.

\subsection{Systém UTM}
\label{utm}
UTM (Universal Transverse Mercator) je systém projekcií vychádzajúci z Mercatorovej projekcie. Povrch
Zeme sa rozdeľuje do 60 zón; každá zóna má vlastnú projekciu, čím sa znižuje skreslenie
projektovaných obrazov. V rámci každej zóny sa potom používajú pohodlné kilometrové súradnice --
\emph{easting} a \emph{northing}.

Každá UTM zóna tvorí pás v blízkom okolí niektorého poludníka, ktorý sa nazýva centrálnym
meridiánom zóny. Pri určovaní súradníc bodu na povrchu Zeme si teda najprv zvolíme UTM zónu,
v ktorej budeme udávať ostatné údaje, prirodzene, najlepšou voľbou bude zóna s najbližším
centrálnym meridiánom, aby došlo k čo najmenšiemu skresleniu.

Súradnica \emph{easting} predstavuje vzdialenosť v metroch meranú od centrálneho meridiána
UTM zóny až ku zvolenému bodu, rastúcu na východ, klesajúcu na západ. Centrálny
meridián UTM zóny má všade konštantný \emph{easting} o hodnote 500000 m.

\emph{Northing} je vzdialenosť v metroch meraná od rovníka, na sever stúpajúca, k zvolenému bodu.
Rovník má všade \emph{northing} rovný 0 m. \cite{tm-1, tm-2}

Geografické súradnice používané u dát z Landsatu sú udané práve v UTM, rovnako aj dáta samotné
(obrazy) sú v UTM (tj. v projekcii príslušnej zóny)\footnote{Údaj pochádza z \texttt{.met}
metasúborov \cite{ls-data}, ktoré sú opísané v sekcii \ref{sec:material}.}. 

\section{Cieľová funkcionalita}
\label{sec:targetfunc}
Program má mať rozhranie konzolovej aplikácie, čo umožňuje zaraďovať ho do väčších celkov -- skriptov a podobne.
Má poskytovať plne automatizované spracovanie, od stiahnutia dát z FTP Landsatu, cez zostrovanie obrazov,
vytváranie výrezov, ich zošívanie, spájanie a konverziu do finálneho obrazového formátu. Prijíma výrez
zadaný v UTM a výstupom je jeden obrázok reprezentujúci snímok daného výrezu vo zvolenom formáte.

Názov spúšťaného príkazu je \texttt{landmerge} a podporuje nasledujúce prepínače:
\begin{itemize}
	\cmdopt{-z <zone>} Číslo UTM zóny. Ide o longitudálnu zónu, teda iba o číslo zóny zbavené
		písmenného suffixu, závislé iba na centrálnom meridiáne zóny. Je to prirodzené
		číslo v rozsahu 1--60.
	\cmdopt{-a <area>} Požadovaný výrez. Zadáva sa vo formáte
		\emph{šírka}x\emph{výška}@\emph{x},\emph{y}, kde \emph{x}, \emph{y} sú súradnice
		ľavého horného rohu výrezu -- \emph{x} je easting a \emph{y} je northing (viď sekciu
		\ref{utm} o UTM), a \emph{šírka}, \emph{výška} sú rozmery snímanej oblasti v metroch.
		Na južnej pologuli je teda northing záporný.
	\cmdopt{-o <outfile.png>} Výstupný súbor. Udáva názov súboru, kam sa má uložiť výsledný
		obrázok. Implicitná hodnota tohto parametra je \texttt{outfile.png}. Od prípony
		tohto súboru závisí formát, do ktoreho sa obrázok nakoniec prevedie. Podporované formáty
		sú:
		\begin{itemize}
			\cmdopt{*.png} PNG, defaultný formát, bezstratová kompresia.
			\cmdopt{*.jpg} JPEG obrázky. Kvalita kompresie sa nastavuje prepínačom \texttt{-q}.
			\cmdopt{*.raw} RAW RGB obrázky. K takýmto súborom sa vygeneruje
				ešte jeden textový súbor (\texttt{file.raw} $\rightarrow$ \texttt{file.raw.size}),
				v ktorom sa nachádza len jeden riadok a na ňom dve prirodzené
				čísla -- šírka a výška obrázka.
		\end{itemize}
	\cmdopt{-q <quality>} Kvalite JPEG kompresie. Prirodzené číslo v rozsahu 1..100, pričom vyššie
		číslo znamená väčší súbor a detailnejší obrázok.
\end{itemize}
Príkaz na spracovanie môže teda vyzerať napríklad nasledovne:

\texttt{./landmerge -z 34 -a 10000x10000@500000,5200000 -o test.png}

\chapter{Implementácia}

\section{Model kombinácie spektrálnych komponentov}
\label{section-comb-model}
Podľa \cite{landweb-overview} pokrýva panchromatický kanál rozsah zhruba kanálov 2, 3 a 4, teda oblasť zeleného
až blízkeho infračerveného svetla. Pre naše účely však potrebujeme informáciu z kanálov 1, 2 a 3, ktoré pokrývajú
pásmo viditeľného svetla. Preto potrebujeme nájsť spôsob, ako kanály miešať -- odpočítať z panchromatického
kanála blízke infračervené pásmo a pripočítať k nemu modré, a teda zvoliť vhodný model miešania spektrálnych
kanálov.

Budeme predpokladať, že môžeme obraz z panchromatického kanála považovať za lineárnu
kombináciu kanálov pokrývajúcich jeho rozsah. Pre pixel $i$ jeho farba $a_i$ teda je
\begin{equation*}
	a_i = \alpha (x_i - x_\varphi) + \beta (y_i - y_\varphi) + \gamma (z_i - z_\varphi) + a_\varphi
\end{equation*}
kde $x_i$, $y_i$, $z_i$ sú intenzity pixelov nasnímaných v zelenom, červenom a blízkom infračervenom pásme,
$\alpha$, $\beta$, $\gamma$ sú multiplikatívne konštanty závisiace od citlivosti panchromatického snímača
v príslušnom pásme a podielu šírky tohoto pásma k šírke celého panchromatického pásma, $x_\varphi$, $y_\varphi$,
$z_\varphi$, $a_\varphi$ sú absolútne aditívne konštanty pre jednotlivé pásma.

Celý výraz sa ale dá ešte zjednodušiť:
\begin{align*}
	a_i ={}& \alpha (x_i - x_\varphi) + \beta (y_i - y_\varphi) + \gamma (z_i - z_\varphi) + a_\varphi \\
	a_i ={}& \alpha x_i + \beta y_i + \gamma z_i + \underbrace{a_\varphi - (\alpha x_\varphi + \beta y_\varphi
			+ \gamma z_\varphi)}_{\varphi = \mathrm{const}} \\
\end{align*}
\begin{align}
	a_i ={}& \label{pixel-mix} \alpha x_i + \beta y_i + \gamma z_i + \varphi
\end{align}

Ak poznáme konštanty $\alpha$, $\beta$, $\gamma$ a $\varphi$, môžeme znalosť $\alpha x_i + \beta y_i$ (čo zodpovedá
zelenému a červenému kanálu) s vysokým rozlíšením použiť na zvýšenie rozlíšenia RGB obrazu vhodným nahradením
červeno-zelenej zložky údajmi z panchromatického kanála (po odčítaní infračervenej zložky).

Potrebujeme teda určiť z nameraných hodnôt (teda z obrazových dát) spomínané konštanty $\alpha$, $\beta$, $\gamma$ a $\varphi$.
To sa vykoná lineárnou regresiou metódou najmenších štvorcov. Nech $b_i$ je nameraná intenzita $i$-tého pixelu
panchromatického kanála, $a_i$ je jeho vypočítaná hodnota z príslušných zložiek podľa vzťahu (\ref{pixel-mix}).
Potom celkovú chybu zavedieme ako súčet štvorcov odchýliek vypočítaných intenzít od nameraných:
\begin{equation}
	\label{eq:Delta}
	\Delta = \sum (a_i - b_i)^2
\end{equation}
Odchýlku chceme minimalizovať, preto položíme
\begin{equation}
	\label{eq:dDelta}
	\frac{\partial \Delta}{\partial \alpha} =
	\frac{\partial \Delta}{\partial \beta} =
	\frac{\partial \Delta}{\partial \gamma} =
	\frac{\partial \Delta}{\partial \varphi} = 0
\end{equation}
Označme $S_\mu = \sum \mu_i$ a $S_{\pi \rho} = \sum \pi_i \rho_i$. Potom po zderivovaní (\ref{eq:Delta}),
dosadení do (\ref{eq:dDelta}) a zjednodušení dostávame:
\begin{align*}
	\alpha S_{xx} + \beta S_{xy} + \gamma S_{xz} + \varphi S_x ={}& S_{bx} \\
	\alpha S_{yx} + \beta S_{yy} + \gamma S_{yz} + \varphi S_y ={}& S_{by} \\
	\alpha S_{zx} + \beta S_{zy} + \gamma S_{zz} + \varphi S_z ={}& S_{bz} \\
	\alpha S_x + \beta S_y + \gamma S_z + \varphi ={}& S_b
\end{align*}
čo prepíšeme do maticového tvaru
\[
	\left( \begin{matrix}
	S_{xx} & S_{xy} & S_{xz} & S_x \\
	S_{yx} & S_{yy} & S_{yz} & S_y \\
	S_{zx} & S_{zy} & S_{zz} & S_z \\
	S_x & S_y & S_z & 1 \\
	\end{matrix} \right)
	\cdot
	\left( \begin{matrix}
		\alpha \\ \beta \\ \gamma \\ \varphi
	\end{matrix} \right)
	=
	\left( \begin{matrix}
		S_{bx} \\ S_{by} \\ S_{bz} \\ S_b
	\end{matrix} \right)
\]
Riešením tejto sústavy lineárnych rovníc dostaneme hľadané konštanty $\alpha$, $\beta$, $\gamma$, $\varphi$.
Všeobecné vzťahy pre ne sú uvedené kvôli ich rozsiahlosti v apendixe (\ref{appendix-abgf}).

Na náhodne vybranej vzorke dát boli namerané nasledujúce konštanty (je to regresia cez celú meranú oblasť):
\begin{equation}
	\begin{split}
		\alpha  ={}& 0.2367 \\
		\beta   ={}& 0.1255 \\
		\gamma  ={}& 0.3228 \\
		\varphi ={}& -5.139 \times 10^{-3}
	\end{split}
\end{equation}
Keďže absolútny člen $\varphi$ je so svojou hodnotou $0.00514$ voči použitej škále $\langle 0, 255 \rangle$
nepatrný, zanedbáme ho\footnote{To zároveň podporuje naše rozhodnutie použiť lineárny model kombinácie
spektrálnych komponentov do panchromatického kanála zo začiatku tejto sekcie.}. To dáva vzťah pre zmiešavanie
kanálov 2, 3 a 4 do panchromatického pre danú vzorku:
\begin{equation}
	a_i \approx 0.237 x_i + 0.126 y_i + 0.323 z_i
\end{equation}
Empiricky sa ukazuje, že všetky vzorky dávajú zhruba rovnaké hodnoty $\alpha$, $\beta$, $\gamma$ a $\varphi$,
navyše pekne korešpondujúce s pomerom rozsahov vlnových dĺžok jednotlivých kanálov k celému panchromatickému kanálu.

\section{Kompozícia RGB obrazu}
\label{sec-kompozicia}

Výsledný RGB obraz s vysokým rozlíšením budeme skladať z dvoch zložiek
\begin{itemize}
	\item RGB obraz s nízkym rozlíšením -- priamym zložením z kanálov 1, 2 a 3.
	\item $\alpha G + \beta R$ obraz s vysokým rozlíšením vzniknuvší odpočítaním blízkej
		infračervenej zložky z panchromatického kanála.
\end{itemize}
Na tento účel by sa nám hodil farebný priestor, ktorý by bol izomorfný RGB a zároveň
by jedna jeho zložka priamo korešpondovala $\alpha G + \beta R$ obrazu, pričom ostatné
jeho zložky by boli na tomto obraze nezávislé. Vtedy by sa dalo
\begin{itemize}
	\item (bezstratovo a jednoznačne) prevádzať medzi týmto priestorom a RGB
	\item nahradiť jednu farebnú zložku obrazu vyjadreného v tomto priestore
		obrazom extrahovaným z panchromatického obrazu, ostatné zložky pritom
		iba interpolovať na vyššie rozlíšenie.
\end{itemize}
To vedie na priamočiary postup konštrukcie výsledného obrazu:
\begin{enumerate}
	\item Zložiť kanály 1, 2 a 3 na RGB obraz s nízkym rozlíšením
	\item Previesť tento obraz do uvedeného farebného priestoru
	\item Zdvojnásobiť rozlíšenie obrazu dointerpolovaním chýbajúcich pixelov
	\item Nahradiť príslušný kanál obrazom získaným odčítaním blízkeho infračerveného
		kanála z panchromatického
	\item Previesť obraz naspäť do RGB priestoru
\end{enumerate}
Ako by mal teda hľadaný priestor (označme ho KLM) vyzerať?

\subsection{Farebný priestor KLM}
Skonštruujme teda maticu prechodu z RGB do KLM\footnote{Tým je zároveň jednoznačne daný
priestor KLM.}.

Budeme chcieť, aby jedna zložka priamo korešpondovala údajom extrahovaným z panchromatického
kanála, nech je to teda trebárs zložka $K$.
\[ K = \beta \cdot R + \alpha \cdot G + 0 \cdot B \]
Navyše bázové vektory KLM budeme chcieť na seba kolmé, čomu vyhovuje voľba $L$ napríklad nasledovne:
\[ L = 0 \cdot R + 0 \cdot G + 1 \cdot B \]
Tretí bázový vektor pre $M$ dostaneme vektorovým súčinom predchádzajúcich dvoch:
\[ M = \alpha \cdot R - \beta \cdot G + 0 \cdot B \]

Odtiaľ odvodíme maticu prechodu a jej inverziu:
\begin{equation*}
	T_{\mathrm{RGB} \rightarrow \mathrm{KLM}} = 
	\left( \begin{matrix}
	\beta  &  \alpha & 0 \\
	0      &  0      & 1 \\
	\alpha & -\beta  & 0
	\end{matrix} \right)
\end{equation*}
\begin{equation*}
	T_{\mathrm{KLM} \rightarrow \mathrm{RGB}} = (T_{\mathrm{RGB} \rightarrow \mathrm{KLM}})^{-1} = 
	\frac {1}{\alpha^2 + \beta^2} \cdot \left( \begin{matrix}
	\beta & 0     &  \alpha \\
	\alpha & 0     & -\beta \\
	0     & \alpha^2 + \beta^2  & 0
	\end{matrix} \right)
\end{equation*}
a teda, pre úplnosť:
\begin{align}
	\left( \begin{matrix} K \\ L \\ M \end{matrix} \right) = {}&
	\left( \begin{matrix}
	\beta  &  \alpha & 0 \\
	0      &  0      & 1 \\
	\alpha & -\beta  & 0
	\end{matrix} \right)
	\cdot	
	\left( \begin{matrix} R \\ G \\ B \end{matrix} \right)
	\\
	\left( \begin{matrix} R \\ G \\ B \end{matrix} \right) = {}&
	\frac {1}{\alpha^2 + \beta^2} \cdot \left( \begin{matrix}
	\beta & 0     &  \alpha \\
	\alpha & 0     & -\beta \\
	0     & \alpha^2 + \beta^2  & 0
	\end{matrix} \right)
	\cdot	
	\left( \begin{matrix} K \\ L \\ M \end{matrix} \right)
\end{align}
a z \ref{pixel-mix} ($\varphi$ zanedbávame):
\begin{equation}
	\label{eq:pan}
	P = \alpha \cdot G + \beta \cdot R + \gamma \cdot I
\end{equation}


\subsection{Kombinácia transformácií}
\label{sec:kombinacia-transformacii}

Poznáme teda vzťahy medzi premennými $K$, $L$, $M$, $R$, $G$, $B$, $I$.

Ďalej si zaveďme novú premennú $K'$, ktorá reprezentuje podiel viditeľného svetla --
hodnotu odvodenú z panchromatického pásma odpočítaním infračerveného kanála s príslušnou váhou,
a premenné $P$ a $I$, ktoré zodpovedajú hodnotám z panchromatického a blízkeho infračerveného kanála.
Nakoniec budeme ešte potrebovať premenné $R'$, $G'$ a $B'$, ktoré reprezentujú finálne zložky RGB
pixela.

Okrem toho budeme chcieť mať možnosť miešať zložku $K$ z RGB obrazu a $K'$ z panchromatického kanála.
Príslušnú konštantu si označme $\eta$. Jej hodnota $\eta = 1$ nech znamená úplné nahradenie zložky
$K$ zložkou $K'$, $\eta = 0$ znamená ponechanie RGB obrazu bezo zmeny.

Pre tieto premenné si teraz napíšeme vzťahy. Zo vzťahu \ref{eq:pan}:
\[ P = \underbrace{\alpha \cdot G + \beta \cdot R}_{K'} + \gamma \cdot I \]
a definície $K''$ (hodnota zmiešaná z $K$ a $K'$ v pomere $\eta$) máme
\begin{equation}
	\label{eq:k}
	\begin{split}
		K' ={}& P - \gamma \cdot I \\
		K'' ={}& \eta K' + (1 - \eta) K
	\end{split}
\end{equation}
Ďalej,
\begin{equation}
	\label{eq:r'g'b'}
	\left( \begin{matrix} R' \\ G' \\ B' \end{matrix} \right) =
	\underbrace{
	\frac {1}{\alpha^2 + \beta^2} \cdot \left( \begin{matrix}
	\beta & 0     &  \alpha \\
	\alpha & 0     & -\beta \\
	0     & \alpha^2 + \beta^2  & 0
	\end{matrix} \right)
	}_{T_{\mathrm{KLM} \rightarrow \mathrm{RGB}}}
	\cdot
	\left( \begin{matrix} K'' \\ L \\ M \end{matrix} \right)
\end{equation}
\begin{equation}
	\label{eq:klm}
	\left( \begin{matrix} K \\ L \\ M \end{matrix} \right) =
	\underbrace{
	\left( \begin{matrix}
	\beta  &  \alpha & 0 \\
	0      &  0      & 1 \\
	\alpha & -\beta  & 0
	\end{matrix} \right)
	}_{T_{\mathrm{RGB} \rightarrow \mathrm{KLM}}}
	\cdot
	\left( \begin{matrix} R \\ G \\ B \end{matrix} \right)
\end{equation}

Z (\ref{eq:klm}) a (\ref{eq:k}) odvodíme:
\begin{equation}
	\label{eq:k'lm}
	\left( \begin{matrix} K'' \\ L \\ M \end{matrix} \right) =
	\left( \begin{matrix}
	\beta (1 - \eta) &  \alpha (1 - \eta)  & 0 & - \eta \gamma & \eta \\
	0      &  0      & 1 & 0       & 0  \\
	\alpha & -\beta  & 0 & 0       & 0
	\end{matrix} \right)
	\cdot
	\left( \begin{matrix} R \\ G \\ B \\ I \\ P \end{matrix} \right)
\end{equation}
A nakoniec z (\ref{eq:r'g'b'}) a (\ref{eq:k'lm}) plynie:
\begin{equation*}
	\label{eq:r'g'b'2}
	\left( \begin{matrix} R' \\ G' \\ B' \end{matrix} \right) =
	\frac {1}{\alpha^2 + \beta^2} \cdot \left( \begin{matrix}
	\beta & 0     &  \alpha \\
	\alpha & 0     & -\beta \\
	0     & \alpha^2 + \beta^2  & 0
	\end{matrix} \right)
	\cdot
	\left( \begin{matrix}
	\beta (1 - \eta) &  \alpha (1 - \eta)  & 0 & - \eta \gamma & \eta \\
	0      &  0      & 1 & 0       & 0  \\
	\alpha & -\beta  & 0 & 0       & 0
	\end{matrix} \right)
	\cdot
	\left( \begin{matrix} R \\ G \\ B \\ I \\ P \end{matrix} \right)
\end{equation*}
Vynásobením prostredných dvoch matíc dostávame:
\begin{equation*}
	\left( \begin{matrix} R' \\ G' \\ B' \end{matrix} \right) =
	\frac {1}{\alpha^2 + \beta^2} \cdot \left( \begin{matrix}
	\alpha^2 + \beta^2 (1 - \eta) & -\alpha \beta \eta & 0 & -\gamma \beta \eta & \beta \eta \\
	-\alpha \beta \eta & \beta^2 + \alpha^2 (1 - \eta) & 0 & -\gamma \alpha \eta & \alpha \eta \\
	0 & 0 & \alpha^2 + \beta^2 & 0 & 0
	\end{matrix} \right)
	\cdot
	\left( \begin{matrix} R \\ G \\ B \\ I \\ P \end{matrix} \right)
\end{equation*}
Vidíme, že modrý kanál je úplne nezávislý na ostatných, preto položíme
\begin{equation}
	\label{eq:b-final}
	B' = B
\end{equation}
a vylúčime ho z rovníc.
\begin{equation}
	\label{eq:rg-final}
	\left( \begin{matrix} R' \\ G' \end{matrix} \right) =
	\frac {1}{\alpha^2 + \beta^2} \cdot \left( \begin{matrix}
	\alpha^2 + \beta^2 (1 - \eta) & -\alpha \beta \eta & -\gamma \beta \eta & \beta \eta \\
	-\alpha \beta \eta & \beta^2 + \alpha^2 (1 - \eta) & -\gamma \alpha \eta & \alpha \eta \\
	\end{matrix} \right)
	\cdot
	\left( \begin{matrix} R \\ G \\ I \\ P \end{matrix} \right)
\end{equation}
čo spolu s (\ref{eq:b-final}) dáva pomerne kompaktný vzorec na výpočet
výsledných RGB komponentov farby.

\section{Architektúra aplikácie}

Aplikácia pozostáva zo skriptov napísaných v jazyku Python, ktoré vykonávajú high-level úlohy
a programov v C, ktoré sa používajú tam, kde je potrebné efektívne spracovať množstvá dát.

Tieto podprogramy sú zaradené do reťaze (obrázok \ref{fig:tokdat}), ktorá na začiatku prijíma
špecifikáciu požadovanej oblasti, zo strán prijíma externé dáta, aby na konci vyprodukovala
výsledný obrázok vo zvolenom formáte.

\begin{figure}[hp]
	\begin{center}
	\includegraphics[width=10cm]{arch.eps}
	\end{center}
	\caption{Schéma toku dát v aplikácii.}
	\label{fig:tokdat}
\end{figure}

Reťaz pozostáva z týchto komponentov:
\begin{itemize}
	\capitem{landmerge} Hlavný skript, ktorý volá všetky ostatné podprogramy/podskripty
		v príslušnom poradí. Okrem toho zabezpečuje interakciu s používateľom (tj.
		parsovanie príkazového riadka).
	\capitem{scenesel} Na základe údajov v databáze súradníc rohov scén a užívateľom
		zadaného rozsahu (výrezu) určí všetky scény, ktoré majú so zadaným výrezom
		neprázdny prienik. Na to využíva databázu v súbore
		\texttt{etc/corners.txt} (čo je textový súbor, kde
		sa na jednom riadku, oddelené dvojbodkami nachádzajú položky jedného záznamu --
		číslo UTM zóny, UTM súradnice a WRS súradnice. Vznikol spracovaním strojovo
		nasťahovaných .met súborov z celého repozitára, tj. z \cite{ls-data}).
	\capitem{downloader} Scény, ktoré boli označené ako incidentné s požadovaným výrezom,
		stiahne a v prípade potreby rozbalí. Má implementovanú základnú inteligenciu,
		aby každý súbor stiahol najviac raz (za dostupnosti programu \texttt{wget}
		dokáže obnovovať prerušené sťahovanie) a podobne.
	\capitem{planner} Na základe metadát z GeoTIFFov a .met súborov zostaví \emph{plán} --
		pre každú scénu určí súradnice výrezu (už v pixeloch) a súradnice vo výslednom
		obraze, kam sa tento výrez má položiť.
	\capitem{stitcher} Podľa dát, ktoré dostane od zvyšku aplikácie,
		\begin{enumerate}
			\item zlúči jednotlivé spektrálne kanály do obrazu v prirodzených
				farbách a s vysokým rozlíšením (na to používa utilitu \texttt{merge})
			\item preloží cez seba takto získané výrezy do výsledného obrázka
				(na to používa utilitu \texttt{stitch}).
		\end{enumerate}
\end{itemize}

Spôsob spracovania dát z jednotlivých kanálov jednotlivých scén je znázornený na obrázku
\ref{fig:merging}. Vstupné TIFF obrázky (pre kanály 1, 2, 3, 4 a 8) sa zlučujú programom
\texttt{merge} do výrezov, ktoré boli predpočítané plánovačom. Tieto výrezy sa potom
programom \texttt{stitch} cez seba preložia (s offsetmi vypočítanými plánovačom) a takto
vznikne výsledný obraz.

\begin{figure}[hp]
	\begin{center}
	\includegraphics[width=12cm]{merging.eps}
	\end{center}
	\caption{Schéma toku dát do stitchera.}
	\label{fig:merging}
\end{figure}

\subsection{Utilita \texttt{merge}}

\texttt{merge} je program napísaný v jazyku C, ktorý má za úlohu (efektívne) vykonať dve veci:
\begin{itemize}
	\item zlúčiť jednotlivé spektrálne kanály do obrazu v prirodzených farbách a s vysokým
		rozlíšením (podľa postupu opísaného v sekcii \ref{sec-kompozicia})
	\item z tohoto obrazu extrahovať (zadaný) výrez a uložiť ho pre ďalšie spracovanie
\end{itemize}

Prirodzene, nedeje sa to vo dvoch etapách (obrazy sú totiž priveľké) zlúčenie-výrez, ale generuje
sa priamo požadovaný výrez.

Program \texttt{merge} pracuje v nasledujúcich krokoch:
\begin{enumerate}
	\item Výpočet regresných koeficientov (podľa modelu v sekcii \ref{section-comb-model}).
		Iterovaním cez každý pixel výrezu sa spočítajú hodnoty $Sxx$, $Sxy$, \ldots,
		z ktorých sa následne vypočítajú váhy $\alpha$, $\beta$ a $\gamma$ zeleného,
		červeného a infračerveného kanálu v panchromatickom kanáli.
		
		Tieto váhy ($\alpha$, $\beta$, $\gamma$) sa používajú v nasledujúcich krokoch
		na výpočet hodnôt pixelov (nenormalizovaného) RGB obrazu podľa vzťahov
		\ref{eq:b-final} a \ref{eq:rg-final}.
	\item Výpočet priemernej hodnoty pixelu (výsledného RGB obrazu) cez celý výrez
		($\bar{x} = \frac{1}{n} \sum x_i$). Potrebné pre neskoršiu normalizáciu.
	\item Výpočet rozptylu hodnôt pixelov vo výslednom RGB obraze cez celý výrez
		($\hat\sigma^2 = \frac{1}{n} \sum (x_i - \bar{x})^2$).
		Potrebné pre neskoršiu normalizáciu.
	\item Normalizácia hodnôt pixelov. Nenormalizovaný obraz vo všeobecnosti nevyužíva plne
		dynamický rozsah RGB. Predpokladá sa (zhruba) normálne rozdelenie hodnôt pixelov
		$N(\bar x, \hat \sigma^2)$. Preto sa obraz normalizuje lineárnou transformáciou
		tak, že sa rozsah intenzít $\bar x \pm \kappa \hat \sigma$ zobrazí práve na rozsah
		0.0--1.0, čo predstavuje celý využiteľný rozsah RGB obrázka. $\kappa$ má
		v aktuálnej implementácii hodnotu 3, čo
		umiestňuje približne 99.8\% všetkých hodnôt pixelov do využiteľného rozsahu
		a 0.2\% hodnôt orezáva na hodnoty 0.0 alebo 1.0.
	\item $\gamma$-kompresia. Na obraz sa nakoniec aplikuje $\gamma$-kompresia so štandardnou
		hodnotou $\gamma = 1/2.2$ ($x_i' = x_i^\gamma$) a tieto hodnoty sa uložia ako RGB
		intenzity do súboru\footnote{V implementácii sa používajú ešte multiplikačné
		konštanty pre gamu jednotlivých RGB kanálov, ktoré posúvajú farebný nádych obrazu
		z fialového do (subjektívne) prirodzenejšieho odtieňa.}.
\end{enumerate}
Všetky výpočty sa dejú v pohyblivej rádovej čiarke s dvojitou presnosťou, zaokrúhľuje sa (a hodnoty
sa orezávajú) až na konci spracovania, pri zápise bajtov do súboru. Obrazy sa nikdy nenačítavajú
do pamäte celé, čítajú sa (a výsledok sa zapisuje) po riadkoch (aj keď implementácia LibTIFF si
podľa spotreby pamäte zrejme v pamäti uchováva o čosi viac než len jeden riadok).

Program \texttt{merge} číta (s využitím LibTIFF) na vstupe TIFF súbory a zapisuje RAW RGB\footnote{
Tieto súbory majú štandardne príponu \texttt{.rgb}.} súbory,
čiže súbory bez hlavičky, obsahujúce priamo RGB trojice bajtov zapísané po riadkoch. V celej
aplikácii sa na interné spracovávanie využívajú RAW RGB súbory, pretože informácie o rozmeroch
obrázkov (udané plánovačom) sa šíria v aplikácii samotnej spolu s názvom súboru. 

\subsection{Utilita \texttt{stitch}}

\texttt{stitch} má za úlohu skombinovať výrezy získané z rôznych scén do jedného obrázka a rozumne
ich cez seba preložiť. V aktuálnej implementácii sa to deje priemerovaním hodnôt pixelov spadajúcich
na to isté miesto.

Na vstupe tento program prijíma RAW RGB súbory, vydáva opäť RAW RGB súbor so zadanými rozmermi.

\subsection{Adresárová štruktúra}
\label{sec:dirs}
Koreňový adresár aplikácie vyzerá nasledovne:
\begin{itemize}
	\cmdopt{bin/} Spustiteľné programy. Nielen binárne, ale aj skripty (prevažne v jazyku Python).
	\cmdopt{doc/} Sprievodné texty, dokumentácia. Obsahuje digitálnu formu tejto práce
		vo formátoch PDF a PS.
	\cmdopt{etc/} Statické dátové súbory, konfigurácia. Momentálne obsahuje len súbor
		\texttt{corners.txt} udržiavajúci súradnice rohov jednotlivých scén.
	\cmdopt{src/} Zdrojové súbory kompilovaných programov.
	\cmdopt{work/} Pracovný adresár, sem sa sťahujú všetky dáta, môže výrazne narásť.
		Je možné preto ho nahradiť symlinkou na nejaké vysokokapacitné médium.
		\begin{itemize}
			\cmdopt{p12-r34/} Adresár obsahujúci dáta pre cestu 12, riadok 34.
			\cmdopt{p56-r78/} Adresár obsahujúci dáta pre cestu 56, riadok 78.
			\item \texttt{...}
		\end{itemize}
	\cmdopt{landmerge} Nie adresár, ale symlinka na hlavný skript aplikácie (a jediný
		program určený na spustenie užívateľom); umiestnená v koreňovom adresári
		pre pohodlie a poriadok.
\end{itemize}

\chapter{Záver}

Vznikla teda aplikácia, ktorá spĺňa oba z cieľov, ktoré sme si kládli. Jednak dokáže
zlúčiť jednotlivé obrazy v rôznych spektrálnych pásmach tak, aby vznikol obraz v prirodzených
farbách a zároveň dvakrát vyšším rozlíšením, než jednoduchým zlúčením červeného, zeleného
a modrého kanála. Navyše aplikácia celý proces zlučovania automatizuje -- na vstupe
dostane súradnice požadovaného výrezu, postará sa o všetko sama a na výstupe vydá do zadaného
súboru v zadanom formáte snímku zadaného výrezu.

\section{Ukážky}

Na obrázku \ref{fig:porovnanie} sa nachádza porovnanie obyčajného RGB obrazu zostaveného
prostým zlúčením červeného, zeleného a modrého kanála do jedného RGB obrázka (hore) s obrazom
získaným našou metódou z kanálov 1, 2, 3, 4 a 8 (dole). Oba obrazy majú rovnaké rozmery (tj.
prvý obraz bol supersamplovaný na dvojnásobné rozlíšenie s lineárnou interpoláciou pixelov).
Ide o oblasť v UTM zóne 34, s rozmermi $8\times3$ km, so súradnicami
ľavého horného rohu $(\mathrm{easting}, \mathrm{northing}) = (514000, 5428000)$,
prvý obraz bol generovaný utilitou \texttt{merge} s hodnotou $\eta = 0$, druhý s hodnotou
$\eta = 1$. (Konštanta $\eta$ je opísaná v sekcii \ref{sec:kombinacia-transformacii}).

\begin{figure}[hp]
	\begin{center}
	\includegraphics[width=1.0\textwidth]{outfile-0.0.eps}
	\includegraphics[width=1.0\textwidth]{outfile-1.0.eps}
	\end{center}
	\caption{Porovnanie obyčajného (hore) a zostreného obrazu (dole).}
	\label{fig:porovnanie}
\end{figure}

Na druhom obrázku (\ref{fig:plastickost}) vidíme stratu plastickosti pri eliminácii
infračerveného kanála, bližší popis sa nachádza v sekcii \ref{sec:dalsie-uvahy} Ďalšie úvahy.

\begin{figure}[hp]
	\begin{center}
	\includegraphics[width=1.0\textwidth]{old.eps}
	\includegraphics[width=1.0\textwidth]{new.eps}
	\end{center}
	\caption{Obraz zostrený jednoduchým spôsobom (hore) a spôsobom opísaným v tejto práci (dole).}
	\label{fig:plastickost}
\end{figure}

\section{Ďalšie úvahy}
\label{sec:dalsie-uvahy}
\emph{...alebo možnosti, zlepšenia, nápady, ktoré sú už mimo rozsahu tejto práce. Čo by sa dalo zmeniť,
prečo niečo nie je tak, ako by to mohlo byť a ako sa to dá dosiahnuť.}

Na obrázkoch sa vyskytuje šum. Je zaujímavý tým, že nie je
úplne náhodný, ale tvorí rovnobežníkovú sieť s rozmermi bunky cca $16\times16$ pixelov. Pochádza zrejme
z panchromatického kanála, kde je viditeľný tiež a jeho vzor sa zdá byť rovnobežný s okrajmi scény --
tj. nečierneho rovnobežníka umiestneného v panchromatickom obrazovom súbore. Zlučovaním viacerých obrazov
stitcherom sa tento šum vypriemeruje a je menej nápadný.

Po vyskúšaní niekoľkých jednoduchých algoritmov\footnote{Išlo najmä o prevedenie supersamplovaného
RGB obrazu do YPbPr, nahradenie Y zložky dátami z panchromatického kanála a prevod späť.} v utilite
\texttt{merge} na zlučovanie spektrálnych
kanálov a napísaní verzie podľa odvodení v tejto práci bola jednou z najnápadnejších zmien
výrazná strata plastickosti terénu (obrázok \ref{fig:plastickost}), typicky zalesnených kopcov
(oproti naivnej verzii a tiež v porovnaní s mapovými službami typu Google Maps).
Pri bližšom skúmaní sa ukázalo, že monochromatické zdrojové obrazy vo viditeľnom svetle sú
skutočne málo plastické; plasticita pochádzala z blízkeho infračerveného kanála, ktorý
sme práve týmto algoritmom z panchromatického kanála eliminovali. Súvisí to zrejme s vo
fotografických kruhoch všeobecne známym faktom, že vegetácia (predovšetkým listy) výrazne odráža
svetlo v infračervenom pásme (viď napríklad graf v \cite{surreal-color}). Google Maps tiež zrejme ladí
obrazy skôr smerom k názornosti než striktnej realistickosti. Možnou úpravou by teda mohlo byť zamiešanie
infračerveného kanála do luminančného kanála výsledného obrazu, čo by obrazu dodalo (aj keď
falošnú) plasticitu.

Do utility \texttt{stitch} by sa mohla pridať korekcia rozdielov svetlosti jednotlivých výrezov, pretože
vo všeobecnosti nemusia mať výrezy na prekryvoch rovnakú svetlosť, čím by vznikali v obraze viditeľné švy.
Avšak pri testovaní sa mi nepodarilo vyprodukovať obrázok s viditeľným švom, a teda toto vylepšenie
nemá veľkú prioritu.

Priestorom na zlepšenie by mohlo aj byť nevytváranie dočasných pracovných súborov s výrezmi a čítanie
priamo gzipovaných TIFF obrázkov a použitie rúr, pretože všetko v aplikácii sa deje (a súbory sa čítajú)
sekvenčne, čím by sa ušetrilo isté množstvo diskového priestoru.

Ďalším vylepšením by mohla byť paralelizácia výpočtu -- tu by však ale bolo potrebné urobiť analýzu,
či (a ako) by bola paralelizácia efektívna. V prípade I/O náročnosti by bolo možné paralelizovať I/O
(čo však asi najvhodnejšie vykoná príslušný RAID), v prípade CPU náročnosti a dostupnosti viacerých
procesorov by bolo možné paralelizovať výpočet na viacerých procesoroch.

Užitočnou vecou by mohol byť jednoduchý GUI front-end s výberom výrezov z mapy, konvertorom medzi
súradnicovými systémami (UTM, uhlové) atď. To však už výrazne presahuje rozsah tejto práce.

\chapter{Apendix}
\section{Všeobecné vzťahy pre $\alpha$, $\beta$, $\gamma$, $\varphi$} \label{appendix-abgf}
(Z Cramerovho pravidla). Použité v sekcii \ref{section-comb-model}.
\begin{align*}
	\alpha' ={}& S_{b} S_{x} S_{yz}^2 - S_{b} S_{x} S_{yy} S_{zz} + S_{b} S_{xy} S_{y} S_{zz} \\
		&- S_{b} S_{xy} S_{yz} S_{z} - S_{b} S_{xz} S_{y} S_{yz} + S_{b} S_{xz} S_{yy} S_{z} - S_{bx} S_{y}^2 S_{zz} \\
		&+ 2 S_{bx} S_{y} S_{yz} S_{z} - S_{bx} S_{yy} S_{z}^2 + S_{bx} S_{yy} S_{zz} - S_{bx} S_{yz}^2 \\
		&+ S_{by} S_{x} S_{y} S_{zz} - S_{by} S_{x} S_{yz} S_{z} + S_{by} S_{xy} S_{z}^2 - S_{by} S_{xy} S_{zz} \\
		&- S_{by} S_{xz} S_{y} S_{z} + S_{by} S_{xz} S_{yz} - S_{bz} S_{x} S_{y} S_{yz} + S_{bz} S_{x} S_{yy} S_{z} \\
		&- S_{bz} S_{xy} S_{y} S_{z} + S_{bz} S_{xy} S_{yz} + S_{bz} S_{xz} S_{y}^2 - S_{bz} S_{xz} S_{yy} \\	 
\end{align*}
\begin{align*}
	\beta' ={}& (S_{b} S_{x} S_{xy} S_{zz} - S_{b} S_{x} S_{xz} S_{yz} - S_{b} S_{xx} S_{y} S_{zz} \\
		&+ S_{b} S_{xx} S_{yz} S_{z} - S_{b} S_{xy} S_{xz} S_{z} + S_{b} S_{xz}^2 S_{y} + S_{bx} S_{x} S_{y} S_{zz} \\
		&- S_{bx} S_{x} S_{yz} S_{z} + S_{bx} S_{xy} S_{z}^2 - S_{bx} S_{xy} S_{zz} - S_{bx} S_{xz} S_{y} S_{z} \\
		&+ S_{bx} S_{xz} S_{yz} - S_{by} S_{x}^2 S_{zz} + 2 S_{by} S_{x} S_{xz} S_{z} - S_{by} S_{xx} S_{z}^2 \\
		&+ S_{by} S_{xx} S_{zz} - S_{by} S_{xz}^2 + S_{bz} S_{x}^2 S_{yz} - S_{bz} S_{x} S_{xy} S_{z} \\
		&- S_{bz} S_{x} S_{xz} S_{y} + S_{bz} S_{xx} S_{y} S_{z} - S_{bz} S_{xx} S_{yz} + S_{bz} S_{xy} S_{xz}) \\
\end{align*}
\begin{align*}
	\gamma' ={}& (S_{b} S_{x} S_{xz} S_{yy} - S_{b} S_{x} S_{xy} S_{yz} + S_{b} S_{xx} S_{y} S_{yz} \\
		&- S_{b} S_{xx} S_{yy} S_{z} + S_{b} S_{xy}^2 S_{z} - S_{b} S_{xy} S_{xz} S_{y} - S_{bx} S_{x} S_{y} S_{yz} \\
		&+ S_{bx} S_{x} S_{yy} S_{z} - S_{bx} S_{xy} S_{y} S_{z} + S_{bx} S_{xy} S_{yz} + S_{bx} S_{xz} S_{y}^2 \\
		&- S_{bx} S_{xz} S_{yy} + S_{by} S_{x}^2 S_{yz} - S_{by} S_{x} S_{xy} S_{z} - S_{by} S_{x} S_{xz} S_{y} \\
		&+ S_{by} S_{xx} S_{y} S_{z} - S_{by} S_{xx} S_{yz} + S_{by} S_{xy} S_{xz} - S_{bz} S_{x}^2 S_{yy} \\
		&+ 2 S_{bz} S_{x} S_{xy} S_{y} - S_{bz} S_{xx} S_{y}^2 + S_{bz} S_{xx} S_{yy} - S_{bz} S_{xy}^2) \\
\end{align*}
\begin{align*}
	\varphi' ={}& (S_{b} S_{xx} S_{yy} S_{zz} - S_{b} S_{xx} S_{yz}^2 - S_{b} S_{xy}^2 S_{zz} + 2 S_{b} S_{xy} S_{xz} S_{yz} \\
		&- S_{b} S_{xz}^2 S_{yy} - S_{bx} S_{x} S_{yy} S_{zz} + S_{bx} S_{x} S_{yz}^2 + S_{bx} S_{xy} S_{y} S_{zz} \\
		&- S_{bx} S_{xy} S_{yz} S_{z} - S_{bx} S_{xz} S_{y} S_{yz} + S_{bx} S_{xz} S_{yy} S_{z} + S_{by} S_{x} S_{xy} S_{zz} \\
		&- S_{by} S_{x} S_{xz} S_{yz} - S_{by} S_{xx} S_{y} S_{zz} + S_{by} S_{xx} S_{yz} S_{z} - S_{by} S_{xy} S_{xz} S_{z} \\
		&+ S_{by} S_{xz}^2 S_{y} - S_{bz} S_{x} S_{xy} S_{yz} + S_{bz} S_{x} S_{xz} S_{yy} + S_{bz} S_{xx} S_{y} S_{yz} \\
		&- S_{bz} S_{xx} S_{yy} S_{z} + S_{bz} S_{xy}^2 S_{z} - S_{bz} S_{xy} S_{xz} S_{y}) \\
\end{align*}
\begin{align*}
	d ={}& (S_{x}^2 S_{yz}^2 - S_{x}^2 S_{yy} S_{zz} + 2 S_{x} S_{xy} S_{y} S_{zz} - 2 S_{x} S_{xy} S_{yz} S_{z} \\
		&- 2 S_{x} S_{xz} S_{y} S_{yz} + 2 S_{x} S_{xz} S_{yy} S_{z} - S_{xx} S_{y}^2 S_{zz} \\
		&+ 2 S_{xx} S_{y} S_{yz} S_{z} - S_{xx} S_{yy} S_{z}^2 + S_{xx} S_{yy} S_{zz} - S_{xx} S_{yz}^2 \\
		&+ S_{xy}^2 S_{z}^2 - S_{xy}^2 S_{zz} - 2 S_{xy} S_{xz} S_{y} S_{z} + 2 S_{xy} S_{xz} S_{yz} \\
		&+ S_{xz}^2 S_{y}^2 - S_{xz}^2 S_{yy}) \\	 
\end{align*}
\begin{align*}
	\alpha ={}& \frac{\alpha'}{d} \\
	\beta ={}& \frac{\beta'}{d} \\
	\gamma ={}& \frac{\gamma'}{d} \\
	\varphi ={}& \frac{\varphi'}{d}
\end{align*}

\section{Návod na inštaláciu a používanie}

Pre inštaláciu a používanie je potrebné splniť požiadavky na hardvérovú a softvérovú
konfiguráciu počítača, opísanú v sekcii \ref{sec:hwsw}.

Na priloženom CD sa v koreňovom adresári nachádza adresárová štruktúra opísaná v sekcii
\ref{sec:dirs}. Túto štruktúru stačí skopírovať kamkoľvek tak, aby bol koreňový adresár
a adresár \texttt{work/} zapisovateľný. Potom sa program spúšta z príkazového riadka
z koreňového adresára, ako je uvedené v sekcii \ref{sec:targetfunc}, napríklad:

\texttt{./landmerge -z 34 -a 10000x10000@500000,5200000 -o test.png}

Na výber scény je vhodné použiť službu ako napríklad Google Maps v kombinácii
s konvertorom uhlových súradníc do UTM (linky v sekcii \ref{sec:links}). Výsledný
obraz sa dá prehliadať ľubovoľným grafickým softvérom (podporujúcim zvolený formát).

\section{Použitý softvér}

Užitočné utility/programy použité pri tvorbe práce.

\begin{itemize}
	\item GIMP (\url{http://gimp.org}) -- Populárny grafický editor
	\item Qalculate (\url{http://qalculate.sourceforge.net}) -- špinavá práca pri derivovaní, zjednodušovaní
		výrazov, invertovaní matíc, počítaní determinantov apod.
	\item LibTIFF (\url{http://libtiff.org}) -- dodávaná s commandline utilitami poskytujúcimi informácie
		o TIFF obrázkoch.
	\item ImageMagick (\url{http://imagemagick.org}) -- konverzia z (takmer) ktoréhokoľvek obrazového
		formátu do (takmer) ktoréhokoľvek
\end{itemize}

\section{Linky}
\label{sec:links}
\begin{itemize}
	\capitem{Universal Transverse Mercator (Wikipedia)}
		\url{http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system}
	\capitem{Geographic/UTM Coordinate Converter}
		\url{http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html}
	\capitem{Google Maps} \url{http://maps.google.com/}
	\capitem{Landmerge na Google Code} \url{http://code.google.com/p/landmerge/}
\end{itemize}

\section{Požiadavky na HW/SW}
\label{sec:hwsw}
Množstvo používanej operačnej pamäte závisí od veľkosti vyrezávanej scény (pretože tá sa konvertuje
celá ImageMagickom). Pre predstavu, na konverziu obrazu $5600\times5600$ pixelov potreboval ImageMagick
necelých 250 MB pamäte. Okrem toho \texttt{merge} na spracovanie všetkých piatich
vstupných súborov potrebuje zhruba 200 MB operačnej pamäte (čo je údaj rovnaký pre každú scénu). Ostatné
parametre ovplyvnia rýchlosť výpočtu. Na stroji s Intel Core2Duo, 2.2 GHz, 2GB RAM (výpočet ale nie je
paralelizovaný, takže sa využilo len jedno jadro) trvá vygenerovanie jedného výrezu $2800\times2800$ pixelov
zhruba pol minúty\footnote{Celkový čas výpočtu z drvivej časti určujú časy generovania jednotlivých výrezov.}.

Závisí teda od veľkosti generovaných výrezov, ale vo všeobecnosti by mal stroj poskytovať aspoň
256 MB \emph{voľnej} operačnej pamäte.

Požiadavky na úložný priestor na disku sú o čosi vyššie než bežné -- pracovný adresár pre jednu scénu
zaberá priestor necelých 600 MB, pričom na jeden výrez (závisí od veľkosti/umiestnenia) sú typicky potrebné
dve až štyri scény. Množstvo požadovaného diskového priestoru je teda niekoľko gigabajtov.

Prostredie pre beh programu by malo byť linuxové/unixové. Okrem toho sú vyžadované nasledujúce
knižnice/programy/balíky:

\begin{itemize}
	\item Python 2.5 (\url{http://python.org}) -- potrebný pre beh jadra aplikácie, napísaného v Pythone.
	\item GCC (\url{http://gcc.gnu.org/}) + build system -- C kompilátor používaný na kompiláciu C utilít
		v adresári \texttt{src/}.
	\item ImageMagick (\url{http://imagemagick.org}) -- používa sa na konverziu obrazových formátov (RAW
		RGB $\rightarrow$ PNG). Konkrétne sa vyžaduje prítomnosť utility \texttt{convert}
		niekde v \texttt{\$PATH}. 
	\item LibTIFF (\url{http://libtiff.org}) -- potrebné na prácu s TIFF obrázkami v C, utilita \texttt{tiffinfo}.
	\item Wget (\url{www.gnu.org/software/wget/}) \emph{voliteľný} -- ak je v systéme prítomný, používa
		sa na sťahovanie súborov z FTP. Výhodou v takom prípade je progressbar a automatické obnovovanie
		prerušených sťahovaní.
\end{itemize}

%%% Seznam literatury
%%%
%%% Literatura se øadí abecednì. Úvádí se pouze literatura, na kterou se v textu odkazuje.
%%% Pøi odkazu na knihu se v¾dy uvádìjí èísla stránek.

\begin{thebibliography}{99}
\addcontentsline{toc}{chapter}{Literatúra}
\bibitem[GT]{geotiff} GeoTIFF homepage and specification \\
	\url{http://www.remotesensing.org/geotiff/geotiff.html}
\bibitem[LD]{ls-data} NASA Landsat Program, 1999-2008, Landsat ETM+ scenes, Orthorectified,
	USGS, All metafiles (\texttt{*.met}), channels 1, 2, 3, 4, 8 (\texttt{*.tif.gz}).
\bibitem[LH1]{lh-home} Landsat handbook \\
	\url{http://landsathandbook.gsfc.nasa.gov/handbook/handbook_toc.html}
\bibitem[LH3]{lh-payload} Landsat payload \\
	\url{http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter3/chapter3.html}
\bibitem[LH5]{lh-orbit} Landsat orbit \\
	\url {http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter5/chapter5.html}
\bibitem[LH6]{lh-dataprops} Landsat data properties \\
	\url{http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter6/chapter6.html}
\bibitem[LH11]{lh-lev1g} Landsat data products -- Level 1G \\
	\url{http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html#section11.3}
\bibitem[LO]{landweb-overview} Landsat imagery overview \\
	\url{http://glcf.umiacs.umd.edu/data/landsat/}
\bibitem[LTG]{lh-techguide} Landsat technical guide \\
	\url{http://glcf.umiacs.umd.edu/data/guide/technical/techguide_landsat.pdf}
\bibitem[SC]{surreal-color} Introduction to Full-Spectrum and Infrared photography (surrealcolor.com)\\
	\url{http://www.surrealcolor.com/IR_explained_web/IR_explained.htm#IRColor}
\bibitem[TM1]{tm-1} Datums, ellipsoids, grids, and grid reference systems \\
	\url{http://earth-info.nga.mil/GandG/publications/tm8358.1/toc.html}
\bibitem[TM2]{tm-2} The universal grids: Universal Transverse Mercator (UTM) and Universal Polar Stereographic (UPS) \\
	\url{http://earth-info.nga.mil/GandG/publications/tm8358.2/TM8358_2.pdf}
\end{thebibliography}

\end{document}












































